import picture_processing
import docx


# 遍历用的函数，尝试使用递归（recursion）来写，算了，暂时用不到
# 拿到列表，递归遍历直至返回结果
# 检索
# 假定lst=[1,2,3,4,5,6]
def _search(lst_, the_docx_lst):
    flag = 1
    lst_1 = lst_.copy()
    result = {}
    del_lst = []
    while flag:
        for num2 in range(len(the_docx_lst)):
            try:
                if lst_1[0] in the_docx_lst[num2]:
                    result[the_docx_lst[num2]] = [the_docx_lst[i].replace(' ', '') for i in
                                                  range(num2 + 1, num2 + 5)]
                    if 'A.对' in the_docx_lst[num2 + 3]:
                        # 删除后三项，因为两个判断的选择在一行内
                        result[the_docx_lst[num2]].pop()
                        result[the_docx_lst[num2]].pop()
                        result[the_docx_lst[num2]].pop()
            except IndexError:
                pass
        try:
            lst_1.pop(0)
        except IndexError:
            pass
        if len(lst_1) == 0:
            flag = 0
    for k, v in result.items():
        # 如果关键字符串2不在问题内，就删除掉不必要的结果
        # 几番尝试下来总是报RuntimeError: dictionary changed size during iteration
        # 建议先将需要删除的键存起来，然后在静态的情况下,转换成列表并逐一删除
        try:
            if lst_[0] in k:
                lst_.pop(0)
            else:
                del_lst.append(k)
                # print('will_del_keys_list:', del_lst)
                lst_.pop(0)
                # del result[k]
        except IndexError:
            pass
    # 再跑一下删除多余项目的遍历
    for key in list(result.keys()):
        for key_item in del_lst:
            if key_item == key:
                del result[key]
    return result


# 另外也需要做选择题与判断题的识别了
# 定义一个最终函数，用来返回处理之后的数据
# 终于来到了将文档存于一个变量的时刻,直接将每一行都存起来，存成一个列表，省的每次都要调用
def get_docx_lines(docx_filepath_):
    file_obj = docx.Document(docx_filepath_)
    the_docx_list_ = []
    for i in range(1, len(file_obj.paragraphs)):
        the_docx_list_.append(file_obj.paragraphs[i].text)
    # print(len(all_content))  # 3763
    return the_docx_list_


# 这俩是比较大的，所以建议只在开头写一次，每次只需使用即可
if __name__ == '__main__':
    docx_filepath = 'dang_shi.docx'
    the_docx_list = get_docx_lines(docx_filepath)
    filepath = './screenshot.jpg'
    bin_obj = picture_processing.get_img_file(filepath)
    lst = picture_processing.img_identification(bin_obj)
    print(lst)
    print(len(the_docx_list))
    answers = _search(lst, the_docx_list)
    print(answers)
